From deb1c115f94278c13362c42e05296cc887e09241 Mon Sep 17 00:00:00 2001 From: "emellor@leeni.uk.xensource.com" Date: Sat, 12 Nov 2005 18:59:56 +0100 Subject: [PATCH] The various changes to move to using info instead of passing the config sxpr everywhere broke the use of a boot loader for booting with. The attached fixes things up so that a) use of a bootloader ==> kernel not specified in the config file b) don't cleanup bootloader files until after the domain has booted c) rerun bootloader on reboot Signed-off-by: Jeremy Katz --- tools/python/xen/xend/XendDomainInfo.py | 12 +++++++----- tools/python/xen/xend/image.py | 2 +- tools/python/xen/xm/create.py | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index 1e06748d5d..886d5c4f0f 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -1049,9 +1049,6 @@ class XendDomainInfo: self.info['image'], self.info['device']) - if self.info['bootloader']: - self.image.handleBootloading() - xc.domain_setcpuweight(self.domid, self.info['cpu_weight']) m = self.image.getDomainMemory(self.info['memory'] * 1024) @@ -1074,6 +1071,9 @@ class XendDomainInfo: self.createDevices() + if self.info['bootloader']: + self.image.cleanupBootloading() + self.info['start_time'] = time.time() @@ -1238,6 +1238,7 @@ class XendDomainInfo: False if it is to be destroyed. """ + self.configure_bootloader() config = self.sxpr() if self.readVm(RESTART_IN_PROGRESS): @@ -1340,8 +1341,9 @@ class XendDomainInfo: # FIXME: this assumes the disk is the first device and # that we're booting from the first disk blcfg = None + config = self.sxpr() # FIXME: this assumes that we want to use the first disk - dev = sxp.child_value(self.config, "device") + dev = sxp.child_value(config, "device") if dev: disk = sxp.child_value(dev, "uname") fn = blkdev_uname_to_file(disk) @@ -1351,7 +1353,7 @@ class XendDomainInfo: msg = "Had a bootloader specified, but can't find disk" log.error(msg) raise VmError(msg) - self.config = sxp.merge(['vm', ['image', blcfg]], self.config) + self.info['image'] = sxp.to_string(blcfg) def send_sysrq(self, key): diff --git a/tools/python/xen/xend/image.py b/tools/python/xen/xend/image.py index b4111d8768..77d07ea545 100644 --- a/tools/python/xen/xend/image.py +++ b/tools/python/xen/xend/image.py @@ -95,7 +95,7 @@ class ImageHandler: ("image/ramdisk", self.ramdisk)) - def handleBootloading(self): + def cleanupBootloading(self): self.unlink(self.kernel) self.unlink(self.ramdisk) diff --git a/tools/python/xen/xm/create.py b/tools/python/xen/xm/create.py index af7080fd56..23ea2ba975 100644 --- a/tools/python/xen/xm/create.py +++ b/tools/python/xen/xm/create.py @@ -565,7 +565,7 @@ def run_bootloader(vals): file = blkif.blkdev_uname_to_file(uname) return bootloader(vals.bootloader, file, not vals.console_autoconnect, - vals.vcpus, vals.blentry) + vals.vcpus, vals.bootentry) def make_config(vals): """Create the domain configuration. @@ -781,7 +781,7 @@ def preprocess_vnc(vals): vals.extra = vnc + ' ' + vals.extra def preprocess(vals): - if not vals.kernel: + if not vals.kernel and not vals.bootloader: err("No kernel specified") preprocess_disk(vals) preprocess_pci(vals) -- 2.30.2